package wci.intermediate;

/**
 * <p>类型说明接口</p>
 * <p>Copyright (c) 2009 by Ronald Mak</p>
 * <p>For instructional purposes only.  No warranties.</p>
 */
public interface TypeSpec
{
	/**
	 * 可以是标量，枚举，子界(sub range)，记录或其它等等
	 * @return 类型格式
	 */
    public TypeForm getForm();
    /**
     * 设置该类型的标识符（比如类型定义中有一个ID)
     * @param identifier 标识符
     */
    public void setIdentifier(SymTabEntry identifier);
    public SymTabEntry getIdentifier();
    public void setAttribute(TypeKey key, Object value);
    public Object getAttribute(TypeKey key);
    /**
     * Pascal中没有直接的类似Java中的String概念，有的只是char数组
     * @return 是否一个Pascal String
     */
    public boolean isPascalString();
    /**
     * 有些类型比如子界(sub range)会有基础类型
     * @return 基础类型
     */
    public TypeSpec baseType();
}
